/***
 * 飞行操作类
 * @author sunflower
 * 2016-08-06
 */
var FlyOpt=function(){
}

/**
*	优化过用户体验的飞行功能
*	@param p_flyAitiude 飞行高度
*   @param p_ajustTime  起飞或者下降时间
*	@param p_longitude	经度
*	@param p_latidue	纬度
*	@param p_aititude	高度
*	@param p_flyTime	飞行时间
*	@param p_viewRange  视距
**/
FlyOpt.prototype.flyToBase=function(p_flyAititude,p_ajustTime,p_longitude,p_latitude,p_altitude,p_flyTime,p_viewRange){
	var scene = sceneControl.get_scene(); 
	var _obj=this; // 记录对象

	/// 转为正北方向、垂直向下视角，并提升高度
	var _c=scene.get_camera();
	_c.set_altitude(p_flyAititude);
	_c.set_heading(0);
	_c.set_tilt(0);
	scene.get_flyingOperator().flyTo(_c,p_ajustTime,SuperMap.Web.Realspace.FlyingMode.JUMP);

	/// 提升高度后，开始跳转到对应位置
	setTimeout(function(){
		var camera = new SuperMap.Web.Realspace.Camera(p_longitude,p_latitude,p_flyAititude);

		//设置相机高度模式
		camera.set_altitudeMode(SuperMap.Web.Realspace.AltitudeMode.CLAMP_TO_GROUND);
		 
		 //设置相机视角的方位角
		camera.set_heading(0);
		
		 //设置相机的俯角
		camera.set_tilt(0);

		//将三维场景飞行到指定的相机处
		scene.get_flyingOperator().flyTo(camera,p_flyTime,SuperMap.Web.Realspace.FlyingMode.JUMP);
		
		/// 飞行到位置后，调整俯仰角度
		setTimeout(function(){
			var _cc=_obj.getCameraByViewPt(p_longitude,p_latitude,p_altitude,p_viewRange);
			//
			var camera = new SuperMap.Web.Realspace.Camera(_cc["x"],_cc["y"],_cc["z"]);
			
			//设置相机高度模式
			camera.set_altitudeMode(SuperMap.Web.Realspace.AltitudeMode.CLAMP_TO_GROUND);
			 
			 //设置相机视角的方位角
			camera.set_heading(_cc["heading"]);

			 //设置相机的俯角
			camera.set_tilt(_cc["tilt"]);

			scene.get_flyingOperator().flyTo(camera,p_ajustTime,SuperMap.Web.Realspace.FlyingMode.JUMP);
		},p_flyTime+100);
	},p_ajustTime+100);
}

/***
*	根据坐标及查看距离，计算新的观察相机位置
*	@param p_x	视点x坐标
*	@param p_y	视点y坐标
*	@param p_z	视点z坐标
*	@param p_range	视点距离
**/
FlyOpt.prototype.getCameraByViewPt=function(p_x,p_y,p_z,p_range){
	var _cameraInfo={};
	_cameraInfo["x"]=p_x;
	/// heading为0
	_cameraInfo["heading"]=0;

	/// tilt角度
	_cameraInfo["tilt"]=60;

	///  默认以向北移动(高度)米, 纬度=距离/111000
	_cameraInfo["y"]=p_y+p_z/111000.0;
	_cameraInfo["z"]=p_z+p_range;

	if(window["console"]) console.info(_cameraInfo);
	return _cameraInfo;
}

/**
*	优化过用户体验的飞行功能
*	@param p_longitude	经度
*	@param p_latidue	纬度
*	@param p_aititude	高度
**/
FlyOpt.prototype.flyTo=function(p_longitude,p_latitude,p_altitude){
	/// 计算后的z=p_altitude*2+50 经测试，该值比较适合正常使用
	this.flyToBase(1000,1500,p_longitude,p_latitude,p_altitude,2000,p_altitude+50);
}